﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Configuration;
using IrendilDLL.Database;
using System.Data;
using IrendilDLL;
using System.Data.SqlClient;
using System.IO;
using IrendilDLL.utilities;

namespace IrendilDLL.PageControls
{
    public class BackupMonitorControl
    {

        /// <summary>
        /// Costruttore di default
        /// </summary>
        public BackupMonitorControl()
        {
            // Procedo solo se é correttamente inizializzata la variabile di sessione
            installationGUID = (String)HttpContext.Current.Session["installationGUID"];

            // Ottengo la stringa di connessione al db
            localSqlServerStr = ConfigurationManager.ConnectionStrings["LocalSqlServer"].ConnectionString;

            //// Istanzio la classe di appoggio per il db di irendil
            //irendilDbManager = new IrendilDbManager(localSqlServerStr);
            //// Istanzio la classe di appoggio per il db
            //dbManager = new DataBaseManager(localSqlServerStr);
        }

        /// <summary>
        /// Guid installazione di riferimento
        /// </summary>
        String installationGUID = null;
        /// <summary>
        /// Stringa di connessione al db
        /// </summary>
        string localSqlServerStr = null;
        /// <summary>
        /// Riferimento al file di log
        /// </summary>
        TextWriter logFile;
        ///// <summary>
        ///// Istanta di appoggio alla classe gestione db
        ///// </summary>
        //DataBaseManager dbManager = null;
        ///// <summary>
        ///// Istanta di appoggio alla classe gestione db di irendil
        ///// </summary>
        //IrendilDbManager irendilDbManager = null;

        /// <summary>
        /// Metodo che preleva da DB gli eventi e li visualizza opportunamente
        /// </summary>
        public DataTable getBackupDT(String hostSelected, DateTime fromDate, DateTime toDate)
        {
            // Prelevo i dati da DB
            try
            {
                DataBaseManager dbManager = new DataBaseManager(localSqlServerStr);

                // Imposto i parametri per la QUERY
                SqlParameter[] parameters = new SqlParameter[4];

                parameters[0] = new SqlParameter("@GUIDInstallation", installationGUID);
                // Nel caso non sia selezionato nulla non filtro altrimenti...
                if (hostSelected == null || hostSelected == "")
                    parameters[1] = new SqlParameter("@GUIDHost", "%");
                else
                    parameters[1] = new SqlParameter("@GUIDHost", hostSelected.ToString().ToUpper());
                // Le date devono essere sempre impostate
                parameters[2] = new SqlParameter("@fromDate", fromDate);
                parameters[3] = new SqlParameter("@toDate", toDate);

                // Apro la transazione, eseguo la store e la chiudo
                dbManager.OpenTransaction();
                DataSet eventDs = dbManager.EseguiStored("sp_getBackupMonitor", parameters);
                dbManager.CloseTransaction();

                // Se la query torna dati continuo
                if (eventDs != null && eventDs.Tables.Count > 0)
                {
                    // Prelevo il dataTable con i dati
                    DataTable dt = eventDs.Tables[0];

                    return dt;
                }
                else
                    return null;
            }
            catch (Exception ex)
            {
                // Istanzio la classe di gestione dell'errore
                LogErrors logError = new LogErrors();
                // Scrivo l'errore su file
                logError.WriteLogToFile(ex.Source+": "+ex.Message);
                // Rimbalzo l'eccezione per la visualizzazione su gui
                throw ex;
            }

        }
    }
}
